package com.baizhi;

import com.baizhi.filter.LoginFilter;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;

import javax.servlet.Filter;

@SpringBootApplication
@MapperScan("com.baizhi.dao")
public class Application {
    //主函数  项目启动入口
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }

    //mybatis-plus工具类的分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作， true调回到首页，false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量，默认 500 条，-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

    /**
     * @Bean 写在启动类中 或者 和@Configuration 配合 可以实现创建对象 并且把对象放在Spring工厂中
     * 1.@Bean 所加的方法 的方法返回值 是要创建的对象类型
     * 2.方法的名字就是要创建的对象的名字
     * 3.要创建的对象在方法中new出来 通过return 就可以放到Spring工厂中
     *
     * 例如创建一个名字为zhangsan的管理员对象
     */
    /*@Bean
    public Admin admin(){
        Admin admin = new Admin();
        admin.setUsername("aaa");
        return admin;
    }*/
    //创建一个过滤器类的对象   并交给Spring工厂管理
  /*  @Bean
    public LoginFilter loginFilter(){
        return new LoginFilter();
    }*/
    //创建一个注册过滤器的对象  也交给Spring工厂管理
    /**
     * 在@Bean 所加的方法上 如果方法形参对应的对象在工厂中存在  Spring会自动装配一个
     * @return
     */
/*    @Bean
    public FilterRegistrationBean filterRegistrationBean(LoginFilter loginFilter){
        //首先 创建一个过滤器的注册器(泛型中的Filter  javax.servlet.Filter包下的 )
        FilterRegistrationBean<Filter> registrationBean = new FilterRegistrationBean<>();
        //其次 设置一个过滤器到注册器对象中 怎么拿到要设置的过滤器对象 可以通过自动装配 也可以使用方法名
        registrationBean.setFilter(loginFilter);
        // 设置过滤器的名字
        registrationBean.setName("loginFilter");
        //设置要过滤的资源路径
        registrationBean.addUrlPatterns("/main.jsp");
        return registrationBean;
        *//**
         * 排除路径怎么处理
         * 1.不拦截的就是排除
         * 2.在过滤器中判断后缀名
         *//*
    }*/
}
